/**********************************************
* @file    	main.c
* @author 	dralee
* @version	v1.0
* @date		2021-12-06
* @brief	I2C EEPROM（AT24C02）存储小数
***********************************************/
#include "stm32f10x.h"
#include "led.h"
#include "usart.h"
#include "i2c_ee.h"
#include <string.h>

uint8_t cal_flag = 0;
uint8_t k;

// 存储小数和整数的数组，各7位
long double double_buffer[7] = {0};
int int_buffer[7] = {0};

#define DOUBLE_ADDR				10
#define LONGINT_ADDR			70

/**
 *****************************************
 * @brief 主函数
 * @param 无
 * @retval 无
 *****************************************/
int main(void)
{
	LED_GPIO_Config();
	USART_Config();				// 串口1 115200 8-N-1
	printf("\r\nEEPROM读写小数和长整数\r\n");
	I2C_EEP_Init();				// I2C外设AT24C02初始化
	
	I2C_EEP_BufferRead(&cal_flag, 0, 1); // 读取数据标志位
	
	if(cal_flag != 0xCD) // 若不等于0xCD，则已有写入数据
	{
		LED_RED;
		printf("\r\n没有检测到数据标志，FLASH没有存储数据，即将进行小数写入\r\n");
		cal_flag = 0xCD;
		
		I2C_EEP_BufferWrite(&cal_flag, 0, 1); // 写入数据标志到0地址
		
		// 生成要写入的数据
		for(k = 0; k < 7; k++)
		{
			double_buffer[k] = k + 0.1;
			int_buffer[k] = k * 500 + 1;
		}
		I2C_EEP_BufferWrite((void*)double_buffer, DOUBLE_ADDR, sizeof(double_buffer));	// 写入小数数据到地址10
		I2C_EEP_BufferWrite((void*)int_buffer, LONGINT_ADDR, sizeof(int_buffer)); 			// 写入整数数据到地址70
		printf("向芯片写入数据：");
		for(k = 0; k < 7; k++)
		{
			printf("小数tx = %LF\r\n", double_buffer[k]);
			printf("整数tx = %d\r\n", int_buffer[k]);
		}
		printf("\r\n请复位开发板，以读取数据进行检验\r\n");
	}
	else
	{
		LED_BLUE;
		printf("\r\n检测到数据标志\r\n");
		I2C_EEP_BufferRead((void*)double_buffer, DOUBLE_ADDR, sizeof(double_buffer)); // 读取小数数据
		I2C_EEP_BufferRead((void*)int_buffer, LONGINT_ADDR, sizeof(int_buffer)); 			// 读取整数数据
		printf("\r\n从芯片读到数据：\r\n");
		for(k = 0; k < 7; ++k)
		{
			printf("小数 rx = %LF\r\n", double_buffer[k]);
			printf("整数 rx = %d\r\n", int_buffer[k]);
		}
	}
	
	while(1)
	{
		
	}
}
